const jwt = require('jsonwebtoken');

const { JWT_SECRET } = require("../config/config.default");

const { tokenExpiredError, invalidToken, hasNotAdminPermission } = require('../constant/err.type.js')


const auth = async (ctx, next) => {
    const { authorization = '' } = ctx.request.headers;
    const token = authorization.replace('Bearer ', '');
    console.log(token)

    try {
        // user包含了pylod的信息，包含id，username，is_admin
        const user = jwt.verify(token, JWT_SECRET);
        ctx.state.user = user;
    } catch (err) {
        switch (err.name) {
            case 'TokenExpiredError':
                console.error("token过期", err)
                return ctx.app.emit('error', tokenExpiredError, ctx);
            case 'JsonWebTokenError':
                console.error("token无效", err)
                return ctx.app.emit('error', invalidToken, ctx);
        }
    }
    await next()
}

const hadAdminPermission = async (ctx, next) => {
    const { is_admin } = ctx.state.user
    if (!is_admin) {
        console.error("该用户没有管理员权限", ctx.state.user);
        return ctx.app.emit('error', hasNotAdminPermission, ctx)
    }
    await next()
}
module.exports = {
    auth,
    hadAdminPermission
} 